﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Infra.Common.DAO
{
    public class ProvinciaDAL
    {
        public static void Salvar(Infra.Entity.LOCPROVINCIA provincia)
        {

            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                if (provincia.CODPROVINCIA != 0)
                {
                    //Alterar a província
                    var prov = dc.LOCPROVINCIAs.Single(pv => pv.CODPROVINCIA == provincia.CODPROVINCIA);
                    prov.STRPROVINCIA = provincia.STRPROVINCIA;
                    prov.CODPAIS = provincia.CODPAIS;
                    dc.SubmitChanges();
                }
                else
                {
                    //Salvar a província
                    dc.LOCPROVINCIAs.InsertOnSubmit(provincia);
                    dc.SubmitChanges();
                }
            }
        }


        public static void Excluir(int idProvincia)
        {
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var prov = dc.LOCPROVINCIAs.Single(pv => pv.CODPROVINCIA == idProvincia);
                dc.LOCPROVINCIAs.DeleteOnSubmit(prov);
                dc.SubmitChanges();
            }
        }



        public static List<Infra.Entity.LOCPROVINCIA> Pesquisar(int codigo, String nome, long codPais)
        {
            List<Infra.Entity.LOCPROVINCIA> provincias = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var prov = from provincia in dc.LOCPROVINCIAs
                           where ((codigo.Equals(0) || codigo.Equals(provincia.CODPROVINCIA)) &&
                                   (nome.Equals(string.Empty) || nome.Equals(provincia.STRPROVINCIA.Contains(nome))) &&
                                   (codPais.Equals(0) || codPais.Equals(provincia.CODPAIS)))

                           select provincia;
                provincias = prov.ToList();
            }
            return provincias;
        }



        public static List<Infra.Entity.LOCPROVINCIA> Pesquisar(int codigos)
        {
            List<Infra.Entity.LOCPROVINCIA> provincias = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var prov = from pais in dc.LOCPAIS
                             from pv in dc.LOCPROVINCIAs
                             where(codigos.Equals(pv.CODPAIS))
                           select pv;
                provincias = prov.Distinct().ToList();
            }
            return provincias;
        }



        public static List<Infra.Entity.LOCPROVINCIA> Pesquisar()
        {
            List<Infra.Entity.LOCPROVINCIA> provincias = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var prov = from provincia in dc.LOCPROVINCIAs
                           select provincia;
                provincias = prov.ToList();
            }
            return provincias;
        }




        public static List<Infra.Entity.LOCPROVINCIA> PesquisarSP(int codigo, String nome, int codPais)
        {
            List<Infra.Entity.LOCPROVINCIA> provincias = null;
            // Pesquisa usando Stored procedure
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                //var prov = dc.SP_PESQUISA_PAIS(codigo, nome, codPais);
                //provincias = prov.ToList();
            }
            return provincias;
        }
    }
}
